package com.dys.test01;

/**
 * @className: com.dys.test01.IntegerTest
 * @description: com.dys.test01
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/07/23 下午10:43
 */
public class IntegerTest {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        new IntegerTest().testMethod();
    }

    /**
     * 1.属性的使用
     */
    public void testAttributes() {
        // 1.属性
        // 1.最大值和最小值
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);
        // 2.物极必反
        System.out.println(Integer.MIN_VALUE - 1);
        System.out.println(Integer.MAX_VALUE + 1);
    }

    /**
     * 2.测试构造器的使用
     */
    public void testConstructor() {
        // int类型作为构造器的参数
        // Integer i1 = new Integer(12);
        // Integer i1 = Integer.valueOf(12);
        // System.out.println(i1);

        // String类型作为构造器的参数
        // Integer i2 = new Integer("12");
        Integer i2 = Integer.parseInt("12");
        // 当传入的字符串无法转成Int类型的数值时,会抛异常
        // Integer i2 = Integer.parseInt("abc");
        System.out.println(i2);
    }

    /**
     * 3.自动装箱和自动拆箱
     */
    public void testAutomaticPackingAndUnpacking() {
        // 自动装箱 jdk1.5之后出现的
        Integer i1 = 12;
        System.out.println(i1);
        // 自动拆箱 jdk1.5之后出现的
        Integer i2 = Integer.valueOf(12);
        int i3 = i2.intValue();
        System.out.println(i3);
    }

    /**
     * 4.方法
     */
    public void testMethod() {
        // compareTo: -1,0,1比较两个数值是否相等
        Integer i1 = Integer.valueOf(18);
        Integer i2 = Integer.valueOf(12);
        int i3 = i1.compareTo(i2); // (x < y) ? -1 : ((x == y) ? 0 : 1);
        System.out.println(i3);

        Integer i4 = new Integer(12);
        Integer i5 = new Integer(12);
        System.out.println(i4 == i5);
        boolean flag = i4.equals(i5);
        System.out.println(flag);

        // Integer通过自动装箱来完成 在-128 - 127之间,直接返回值
        // 如果是在-128到127的数之间，那么获取的是那个数组中的Integer对象吧，不是数字，
        // 此时数组下标一样，所以取到的对象是同一个，地址相同，==为true；而130的时候都是新创建的Integer对象，所以地址不一样，==为false。
        Integer i6 = 13;
        Integer i7 = 13;
        System.out.println(i6 == i7);
        System.out.println(i6.equals(i7));

        // 超过127才执行自动装箱
        Integer i8 = 130;
        Integer i9 = 130;
        System.out.println(i8 == i9);
        System.out.println(i8.equals(i9));

        // intValue
        Integer i10 = 130;
        int i11 = i10.intValue();
        System.out.println(i11);

        // parseInt
        int i12 = Integer.parseInt("12");
        System.out.println(i12);

        // toString-->int-String
        Integer i13 = 130;
        System.out.println(i13.toString());
    }

}
